/**
 * 创建一个函数，调用func时参数为相对应的transforms的返回值。
 * @param func - 要包裹的函数。
 * @param transforms - 一个函数数组，每个函数的返回值将作为func的参数。
 * @returns 返回新函数。
 * @example
 * const func = (x: number, y: number) => [x, y]
 * const add = (a: number) => a + 1
 * const square = (a: number) => a * a
 * const composedFunc = overArgs(func, [add, square])
 * composedFunc(3, 4) // [4, 16]
 */

export function overArgs(func: Function, transforms: Function[]) : Function {
    if (transforms.length === 0) return func

    return (...args: any[]) => {
        const nextArgs = args.map((arg, i) => transforms[i](arg))
        return func(...nextArgs)
    }
}